package com.hsurosy.hsuchain.nft.auth.vo;

import cn.dev33.satoken.stp.StpUtil;
import com.hsurosy.hsuchain.nft.api.user.response.data.UserInfo;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * 登录响应对象（VO）
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-05 19:22
 * @Description
 * @Version: v1.0.0
 */
@Data
@NoArgsConstructor
public class LoginVO implements Serializable {

    private static final long serialVersionUID = 1L; // 序列化版本号，用于确保对象在反序列化时的一致性

    /**
     * 用户标识，如用户ID。
     * 用于唯一标识登录用户。
     */
    private String userId;

    /**
     * 访问令牌。
     * 登录成功后生成的 Token，用于在后续请求中进行身份验证。
     */
    private String token;

    /**
     * 令牌过期时间。
     * 记录当前用户登录的 Token 何时过期，以便客户端可以在 Token 过期前刷新或重新登录。
     */
    private Long tokenExpiration;

    /**
     * 根据用户信息构造 LoginVO。
     *
     * @param userInfo 用户信息，包含用户的基本数据
     */
    public LoginVO(UserInfo userInfo) {
        this.userId = userInfo.getUserId().toString(); // 将 UserInfo 中的 userId 转换为字符串
        this.token = StpUtil.getTokenValue(); // 从 Sa-Token 获取当前登录的 Token
        this.tokenExpiration = StpUtil.getTokenSessionTimeout(); // 获取 Token 的过期时间
    }
}
